<?php
// +----------------------------
// | Created by PhpStorm
// +----------------------------
// | Author: YnnSon
// +----------------------------
namespace app\api\validate;

use app\lib\exception\ParameterException;
use think\Request;
use think\Validate;

/**
 * 验证器基类
 * Class BaseValidate
 * @package app\api\validate
 */
class BaseValidate extends Validate
{
    /**
     * @Desc 数据自动验证，检测所有客户端发来的参数是否符合验证类规则
     * @return bool true
     */
    public function goCheck()
    {
        $data = Request::instance()->param();
        if (!$this->batch()->check($data)) {
            $error = $this->getError();
            if (is_array($error)) {
                $error = implode(',', $error);
            }
            throw new ParameterException(['message' => $error]);
        }
        return true;
    }

    /**
     * @Desc 数据字段过滤
     * @param array $data 数据
     * @return array 过滤后的数据
     */
    public function getDataByRule(array $data)
    {
        // 判断是否传入了如user_id, uid等敏感字段
        if (array_key_exists('user_id', $data) || array_key_exists('uid', $data)) {
            throw new ParameterException([
                'message' => '传入参数非法',
            ]);
        }
        $newData = [];
        foreach ($this->rule as $key => $value) {
            $newData[$value[0]] = $data[$value[0]];
        }
        return $newData;
    }

    /**
     * @Desc 是否是正整数
     * @param string $value 字段值
     * @return bool true|false
     */
    protected function isPositiveInteger($value)
    {
        return is_numeric($value) && is_int($value + 0) && ($value + 0) > 0;
    }

    /**
     * @Desc 是否不为空
     * @param mixed $value 字段值
     * @return bool true|false
     */
    protected function isNotEmpty($value)
    {
        if (is_string($value)) {
            return '' != trim($value);
        }
        if (is_array($value)) {
            return !empty($value) ? true : false;
        }
    }

    /**
     * @Desc 手机号格式是否正确
     * @param string $value 字段值
     * @return bool true|false
     */
    protected function isMobile($value)
    {
        $pattern = '/^1[3-9]\d{9}$/';
        return preg_match($pattern, $value) ? true : false;
    }

    /**
     * @Desc 注册日期格式是否正确
     *
     * @param string $value 字段值
     *
     * @return bool true|false
     */
    protected function isRegisterDate($value)
    {
        $pattern = "/^([0-9]{4})([0-9]{2})([0-9]{2})$/";
        return preg_match($pattern, $value) ? true : false;
    }
}